home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / tcxl551.arc / TCXL_INC.EXE / lha / INC / TCXLKEY.H < prev    next >
Text File  |  1990-10-01  |  10KB  |  182 lines

  1. /*=====[ The TesSeRact(TM) CXL User Interface Development System ]======*
  2.  | Copyright (c) 1987-1990, Innovative Data Concepts. All Rights Reserved
  3.  |
  4.  | This Library is part of IDC's TesSeRact Development Tools product
  5.  | line. For information about other IDC products, call 1-215-884-3373.
  6.  *----------------------------------------------------------------------*
  7.  | <TCXLkey.h> : Public definitions and prototypes for TCXL Input system.
  8.  | (Middle level).
  9.  *-------------------------------[ Notes ]------------------------------*
  10.  | 1) Almost all of the keyboard-access functions are MS-DOS dependent.
  11.  *----------------------------------------------------------------------*
  12.  | PGS : $Id: tcxlkey.h 5.51 90/10/01 00:00:00 MLM Release Locker: MLM $
  13.  | $Log:    tcxlkey.h $
  14.  | Revision 5.51  90/10/01  00:00:00  MLM
  15.  | TCXL 5.51
  16.  | 
  17.  *======================================================================*/
  18. #ifndef  _TCXLkey_
  19. #  define   _TCXLkey_ 1
  20. #  ifndef   _TCXLdef_
  21. #     include  <TCXLdef.h>    /* standard definitions */
  22. #  endif
  23.                               /*- KeyStat() return bits (MS-DOS) -------*/
  24. #define  KEY_RSH  0x01        /* [right shift] pressed                  */
  25. #define  KEY_LSH  0x02        /* [left shift] pressed                   */
  26. #define  KEY_CTL  0x04        /* [Ctrl] pressed                         */
  27. #define  KEY_ALT  0x08        /* [Alt] pressed                          */
  28. #define  KEY_SCR  0x10        /* [Scroll Lock] toggled                  */
  29. #define  KEY_NUM  0x20        /* [Num Lock] toggled                     */
  30. #define  KEY_CAP  0x40        /* [Caps Lock] toggled                    */
  31. #define  KEY_INS  0x80        /* [Ins] toggled                          */
  32.  
  33. #define  KEY_EXT  0x80        /* KctlFlg = extended functions           */
  34. #define  KEY_MNU  0x01        /* KctlFlg = currently in menu            */
  35. #define  KEY_KBD  0x00        /* KctlSrc = keyboard                     */
  36. #define  KEY_QUE  0x01        /* KctlSrc = key-queue                    */
  37. #define  KEY_MOU  0x02        /* KctlSrc = mouse                        */
  38. #define  KEY_MAX  128         /* size of key-queue                      */
  39. #define  KEY_BRK  0xFFFF      /* ^Break return from _KeyHit()/_KeyGet() */
  40.  
  41. /*------------------[ Data objects and access macros ]------------------*/
  42.  
  43. TYP   union    Kcod  KcodT, *KcodP;
  44. TYP   struct   Kctl  KctlT, *KctlP;
  45. TYP   struct   Kbnd  KbndT, *KbndP;
  46.  
  47. union    Kcod           /*-[ Complete keycode ]----------*/
  48. {  KeyT     ckey;       /* 00|00 : word overlay          */
  49.    struct               /*                               */
  50.    {  BytT  asc;        /* 00|00 : ASCII char or 0=ext   */
  51.       BytT  scn;        /* 01|01 : scancode              */
  52.    }  c;                /*                               */
  53. };                      /* 02|02 ]-----------------------*/
  54. #define  KcodKey(x)     ((x).ckey)
  55. #define  KcodAsc(x)     ((x).c.asc)
  56. #define  KcodScn(x)     ((x).c.scn)
  57.  
  58. struct   Kbnd           /*-[ Key-binding object ]--------*/
  59. {  KbndP    bptr;       /* 00|00 : next binding          */
  60.    VfvCP    bfun;       /* 02|04 : bound function        */
  61.    KeyT     bkey;       /* 04|08 : bound keycode         */
  62.    KeyT     brtn;       /* 06|0C : return keycode        */
  63. };                      /* 08|0E ]-----------------------*/
  64. #define  KbndPtr(b)  ((b)->bptr)
  65. #define  KbndFun(b)  ((b)->bfun)
  66. #define  KbndKey(b)  ((b)->bkey)
  67. #define  KbndRtn(b)  ((b)->brtn)
  68.  
  69. struct   Kctl           /*-[ Key-control object ]--------*/
  70. {  BytT     kflg;       /* 00|00 : control-flag          */
  71.    BytT     ksrc;       /* 01|01 : keycode source        */
  72.    IntT     kbeg;       /* 02|02 : key-queue head        */
  73.    IntT     kend;       /* 04|04 : key-queue tail        */
  74.    IntT     kcnt;       /* 06|06 : key-queue count       */
  75.    IntT     kmax;       /* 08|08 : key-queue size        */
  76.    KeyP     kbas;       /* 0A|0A : key-queue base        */
  77.    KbndP    kbnd;       /* 0C|0E : key-binding list      */
  78.    VfvCP    kidl;       /* 0E|12 : idle-loop function    */
  79.    KeyT     khlp;       /* 10|16 : help keycode          */
  80.    VfvCP    kfun;       /* 12|18 : help function         */
  81. };                      /* 14|1C ]-----------------------*/
  82.  
  83. GBL   KctlT CDC _KeyCtl;      /*- global key-control object ------------*/
  84. #define  KctlFlg  (_KeyCtl.kflg)                      /* control-flag   */
  85. #define  KctlMnu  (0 != (KctlFlg & KEY_MNU))          /*    in-menu     */
  86. #define  KctlExt  (0 != (KctlFlg & KEY_EXT))          /*    extended    */
  87. #define  KctlSrc  (_KeyCtl.ksrc)                      /* keycode-source */
  88. #define  KctlKbd  (KctlSrc == KEY_KBD)                /*    keyboard    */
  89. #define  KctlQue  (KctlSrc == KEY_QUE)                /*    key-queue   */
  90. #define  KctlMou  (KctlSrc == KEY_MOU)                /*    mouse       */
  91. #define  KctlBeg  (_KeyCtl.kbeg)                      /* queue-head     */
  92. #define  KctlEnd  (_KeyCtl.kend)                      /* queue-tail     */
  93. #define  KctlCnt  (_KeyCtl.kcnt)                      /* queue-count    */
  94. #define  KctlMax  (_KeyCtl.kmax)                      /* queue-size     */
  95. #define  KctlBas  (_KeyCtl.kbas)                      /* queue-base     */
  96. #define  KctlBnd  (_KeyCtl.kbnd)                      /* binding list   */
  97. #define  KctlIdl  (_KeyCtl.kidl)                      /* idle function  */
  98. #define  KctlHlp  (_KeyCtl.khlp)                      /* help keycode   */
  99. #define  KctlFun  (_KeyCtl.kfun)                      /* help function  */
  100.  
  101. GBL   KeyT  CDC _KeyQue[];    /*- global key-queue ---------------------*/
  102.  
  103. /*------------------------[ Function prototypes ]-----------------------*/
  104.  
  105. #ifdef __cplusplus            /* no mangling, please */
  106.    extern   "C"   {
  107. #endif
  108.                                        /*- Input to active window ------*/
  109. IntT  CTYP  KwGetCf(ChrP v, IntT d);   /* Get valid key                 */
  110. IntT  CTYP  KwGetCh(NOARG);            /* Get key                       */
  111. IntT  CTYP  KwGetFmt(ChrP s, ChrP f);  /* Get TCXL formatted string     */
  112. IntT  CTYP  KwGetSn(ChrP s, IntT m);   /* Get limited string            */
  113. IntT  CTYP  KwGetSt(ChrP ps);          /* Get string                    */
  114. IntT  CTYP  KwGetYn(IntT cd);          /* Get Y|N answer                */
  115. #ifdef   __TURBOC__
  116. IntT  CDC   KwScanf(ChrP fs, ...);     /* Get scanf() string            */
  117. #endif
  118.                                        /*- Input to default video ------*/
  119. IntT  CTYP  KvGetCf(ChrP v, IntT d);   /* Get valid key                 */
  120. IntT  CTYP  KvGetCh(NOARG);            /* Get key                       */
  121. IntT  CTYP  KvGetFmt(ChrP s, ChrP f);  /* Get TCXL formatted string     */
  122. IntT  CTYP  KvGetSn(ChrP s, IntT m);   /* Get limited string            */
  123. VOID  CTYP  KvGetSt(ChrP ps);          /* Get string                    */
  124. IntT  CTYP  KvGetYn(IntT cd);          /* Get Y|N answer                */
  125. #ifdef   __TURBOC__
  126. VOID  CDC   KvScanf(ChrP fs, ...);     /* Get scanf() string            */
  127. #endif
  128.                                        /*- Asynchronous input ----------*/
  129. KbndP CTYP  KbndChg(KbndP l);          /* Swap binding-stack pointers   */
  130. IntT  CTYP  KbndClr(KeyT k);           /* Unbind key                    */
  131. VOID  CTYP  KbndFre(NOARG);            /* Free all stacked key-bindings */
  132. VOID        KbndIdle(VfvCP a);         /* Assign idle-loop function     */
  133. IntT  CTYP  KbndSet(KeyT k, VfvCP f,   /* Bind key to function & return */
  134.    KeyT r);
  135.                                        /*- Input, no echo --------------*/
  136. VOID        KeyClear(NOARG);           /* Clear keyboard                */
  137. IntT  CTYP  KeyEvent(NOARG);           /* Detect key event              */
  138. KeyT  CTYP  KeyGetc(NOARG);            /* Get key/mouse event           */
  139. KeyT        KeyPeek(NOARG);            /* Peek at waiting keycode       */
  140. WrdT        KeyStat(NOARG);            /* Get keyboard status           */
  141. KeyT  CTYP  KeyTime(IntT t);           /* Wait for key or time-out      */
  142. KeyT        KeyWait(NOARG);            /* Wait for key                  */
  143.                                        /*- TCXL key-queue --------------*/
  144. IntT        KqueChk(NOARG);            /* Test for enqueued keycodes    */
  145. VOID  PAS   KqueClr(NOARG);            /* Clear FIFO queue              */
  146. KeyT  PAS   KqueGet(NOARG);            /* Get key at head of queue      */
  147. IntT  PAS   KquePut(KeyT k);           /* Put key on tail of queue      */
  148. IntT  CTYP  KqueStr(ChrP s);           /* Add string to tail of queue   */
  149.                                        /*- Keyboard access (MS-DOS) ----*/
  150. WrdT  PAS   _KeySta(NOARG);            /* Get keyboard status           */
  151. VOID  PAS   _KeySet(IntT b, IntT s);   /* Toggle keyboard state         */
  152. IntT  PAS   _KeyExt(NOARG);            /* Test for extended BIOS        */
  153. KeyT  PAS   _KeyGet(NOARG);            /* Get waiting key via BIOS      */
  154. KeyT  PAS   _KeyHit(NOARG);            /* Test for waiting key via BIOS */
  155. VOID        KcapOff(NOARG);            /* CapsLock ON                   */
  156. VOID        KcapOn(NOARG);             /* CapsLock OFF                  */
  157. VOID        KextOff(NOARG);            /* Extended BIOS support OFF     */
  158. VOID        KextOn(NOARG);             /* Extended BIOS support ON      */
  159. VOID        KinsOff(NOARG);            /* Insert OFF                    */
  160. VOID        KinsOn(NOARG);             /* Insert ON                     */
  161. VOID        KnumOff(NOARG);            /* NumLock OFF                   */
  162. VOID        KnumOn(NOARG);             /* NumLock ON                    */
  163. IntT  CTYP  KscnCod(IntT c);           /* Return scan-code for ASCII    */
  164. #define  KbndIdle(a) (KctlIdl = a)
  165. #define  KcapOff()   (_KeySet(KEY_CAP, 0))
  166. #define  KcapOn()    (_KeySet(KEY_CAP, 1))
  167. #define  KextOff()   (KctlFlg &= ~KEY_EXT)
  168. #define  KextOn()    if(TcxlKey) KctlFlg |= KEY_EXT
  169. #define  KeyClear()  while(_KeyHit()) _KeyGet()
  170. #define  KeyStat()   (_KeySta())
  171. #define  KeyPeek()   (_KeyHit())
  172. #define  KeyWait()   (KeyTime(-1))
  173. #define  KinsOff()   (_KeySet(KEY_INS, 0))
  174. #define  KinsOn()    (_KeySet(KEY_INS, 1))
  175. #define  KnumOff()   (_KeySet(KEY_NUM, 0))
  176. #define  KnumOn()    (_KeyNum(KEY_NUM, 1))
  177. #define  KqueChk()   (KctlCnt > 0)
  178. #ifdef __cplusplus
  179.    }
  180. #endif
  181. #endif   /* _TCXLkey_ : End of TCXLkey.h */
  182.